% coding: utf-8

\subsection{Descripción del problema resuelto}
A partir de la gramática propuesta, debemos generar un parser y lexer que permitan validar distintas expresiones aritméticas. La gramática es la siguiente: \\

G = $<V_N, V_T, P, Programa >$ donde \\
$V_N$ = \{$Programa, Sentencias, Sentencia, Identificadores, Expr$\} \\
$V_T$ = \{$;, unidades, var, id, =, +, -, *, /, \wedge, entero, , ,numero$\} \\
\textit{P:}\\
\indent Programa $\rightarrow$ Sentencias \\
\indent Sentencias $\rightarrow$ Sentencia ; Sentencias $\mid$ $\lambda$\\
\indent Sentencia $\rightarrow$ unidades Identificadores $\mid$ var id $=$ Expr $\mid$ Expr \\
\indent Identificadores $\rightarrow$ id $\mid$ Identificadores, id \\
\indent Expr $\rightarrow$ Expr $+$ Expr $\mid$ Expr $-$ Expr $\mid$ Expr $*$ Expr $\mid$ Expr Expr $\mid$ Expr $/$ Expr
$\mid$ $-$ Expr $\mid$ Expr $\wedge$ entero $\mid$ numero $\mid$ id $\mid$ (Expr) \\

Las condiciones que debemos validar, además de la sintaxis son:
\begin{itemize}
\item Las unidades del resultado son correctas
\item Cuando se declara una unidad, ésta no puede haber sido utilizada antes como variable, ni puede serlo luego. 
\item Una variable solamente puede aparecer en una expresi\'on si ya fue declarada antes.
\item Cuando se imprimen las unidades, cada una puede aparecer una única vez, y siempre con exponente distinto de 0 (las unidades tienen que estar simplificadas)
\end{itemize}

Estas últimas condiciones deberemos plantearlas por medio de una traducción dirigida por la sintaxis. Además, con la misma herramienta calcularemos el valor de las expresiones imprimiéndolo para cada sentencia finalizada con ;.

